2.2 Isaac Sim常见工作流及其主要场景¶
Isaac Sim是用于设计、调试、训练以及部署物理机器人智能体任务的仿真平台。它提供了两种工作流方式实现这些场景,以下是相关介绍:
注:其中训练核心部分是通过Isaac Lab实现,Isaac Sim为训练提供仿真数据采集的部分。
图形化界面:此工作流是通过图形化的方式把仿真场景进行渲染,界面提供了参数设置面板、构建任务逻辑的低代码工具,开发者可以基于界面进行设计和构建机器人、场景和任务。除此以外,训练任务时的渲染和训练后的模型部署也可以通过图形化界面进行查看。
独立的Python脚本:此工作流通过Python脚本的方式设计Isaac Sim启动流程以及任务逻辑。Isaac Sim提供了完善的Python 扩展(具体见https://docs.isaacsim.omniverse.nvidia.com/latest/py/index.html),基于这些API可以实现设计、调试和部署机器人资产及相关模型。
2.3 Isaac Sim图形化界面介绍¶
通过"Isaac Sim容器化安装"的内容介绍,我们已经知道Isaac Sim图形化界面如何启动,大家访问界面可以发现界面涉及的要素很多,以下将详细介绍Isaac Sim的图形化界面。
以下是Isaac Sim的图形化界面,我们可以简单对界面各个部分进行分类:
| 编号 | 部件名称 | 部件作用 |
|---|---|---|
| 1 | 菜单栏 | 软件功能入口 |
| 2 | 视图窗口 | 3D场景实时渲染显示区域 |
| 3 | 工具栏 | 快捷操作工具集 |
| 4 | 文件浏览器 | 容器文件管理系统 |
| 5 | USD场景树 | 场景层级结构可视化 |
| 6 | 属性面板 | 当前选中Prim的详细参数配置 |
以下将对界面各个部分进行详细介绍。
Create(创建):创建各种仿真对象的菜单,例如以下使用Create在场景内创建一个立方体
- 点击"Create",在"Mesh"部分选择"Cube"

- 在视图窗口可以看到,一个立方体将创建至中心位置,右侧USD场景树也展示立方体元素内容

Windows(窗口):用于打开/隐藏Isaac Sim各部分的窗口,这些窗口组成Isaac Sim的图形化界面,例如以下隐藏Isaac Sim的文件管理器
- 点击"Windows",在"Browsers"的子选项取消勾选"Content"

- 如下图所示,文件浏览器部分已被隐藏

Tools(工具):仿真工作流过程使用的工具。例如下图展示Isaac Sim默认打开"Main Toolbar"(主要工具栏)

- Utilities
Layouts(布局):用于调整Isaac Sim图形化界面展示布局。例如以下通过"Layouts"调整可视化脚本布局(Visual Scripting)及恢复默认布局(Default Layout)。
- 点击"Layouts",选择"Visual Scripting",即可调整为可视化脚本布局,如下图所示

- 点击"Layouts",选择"Default Layout",即可恢复为默认布局,如下图所示

- Help(帮助):提供Isaac Sim相关帮助文档及示例。例如以下打开一个机械臂夹取方块的示例。
注意:由于本课程通过Docker容器化安装Isaac Sim,Help帮助文档按钮可能会无响应或者导致Isaac Sim可视化界面崩溃,请切勿点击,相关帮助文档链接已在"Isaac Sim仿真平台介绍及容器化安装"章节展示。
点击"Help",选择"Robotic Example"

点击"Robotic Example"后,会在下方加载对应Tag界面,在界面点击"CORTEX" -> 选择"Franka Cortex Example" -> 右侧示例面板点击"load"按钮,如下图所示

加载"Franka Cortex Example"后,大家可以看到界面会有一个机械臂和多个方块。点击右侧示例面板"Task Controller"部分"START"按钮开启示例任务的执行,如下图所示

2.3.2 工具栏¶
由菜单栏的Tools内容可以知道,Isaac Sim提供了"Main ToolBar"和"Physics ToolBar"这两种工具栏,由于"Main ToolBar"使用频率较高,此处仅介绍"Main ToolBar"内容。"Main ToolBar"由八部分组成,以下是相关介绍:
Selection(选择):用于在视图中选择对象,如下图所示,创建一个立方体并选择它,右侧场景树立方体部分同样被选中,右下方属性面板将展示立方体相关属性

Selection(选择模式):用于在视图中选择不同种类物品(Mesh网格、灯光、相机)或不同类型元素
Move(移动):用于在视图中调整对象位置,如下图所示,点击"Move"按钮,选择立方体,可看到在立方体中心点有xyz坐标轴,可以在任一轴向移动立方体

- Rotate(旋转):用于在视图中旋转对象角度,如下图所示,点击"Rotate"按钮,选择立方体,可看到立方体有三个旋转方向,可以在任一方向旋转立方体

- Scale(缩放):用于在视图中缩放对象,如下图所示,点击"Scale"按钮,选择立方,可看到立方体有三个缩放方向,可以在任一方向缩放立方体

Snap(快照)
Play(播放):用于开始仿真,如下图所示,在立方体增加刚体属性,在场景中添加物理场和地面,点击"Play"按钮,可以看到立方体将掉落至地面

- Stop(停止播放):用于停止仿真,当开始仿真时按钮会显示
2.3.3 文件浏览器¶
在Isaac Sim容器中,往往存放的Isaac Sim核心启动文件以及官方提供的资产文件,以下将以打开一个Simple Room(简单房间)场景为例,展示文件浏览器使用方法。
注:本课程使用的Isaac Sim容器存放官方资产文件路径为"/isaac-sim/isaacsim_assets",Simple Room场景资产存放路径为"/isaac-sim/isaacsim_assets/Assets/Isaac/4.5/Isaac/Environments/Simple_Room/simple_room.usd"

注意:在打开场景后,出现了WebRTC软件黑屏的情况,如下图所示:
这是因为IsaacSim在渲染资产的时候,渲染负载过大,而导致的传输渲染画面中断,我们只需稍等片刻并使用WebRTC软件中的
View→Reload(F5)来重新加载渲染画面即可,如下图
后续的加载资产操作过程中,若再次出现这种情况可以重新进行
Reload操作
2.3.4 USD场景树¶
在Isaac Sim中,渲染的物品均为OpenUSD(后续简称为USD)格式,这一格式通过组合式架构管理物品中的层级、关联关系,以下通过一个机械臂为例,展示USD场景树信息。
通过"Create" -> "Robots" -> "Franka Emika Panda Arm"打开机械臂,如下所示

可以展开机械臂USD场景树,可以看到机械臂很多个链状物(link)组成,链状物由许多几何材料组成,如下图所示

2.3.5 属性面板¶
属性面板用于显示所选Prim的属性内容,对于查看、调试物品属性十分有帮助,以下通过查看机械臂关节体属性为例,展示属性面板使用方法。
- 通过"Create"->"Robots"->"Franka Emika Panda Arm"创建机械臂

- 在右侧USD场景树点击"Franka"的Prim,在右下方Property面板查看"Physics"->"Articulation Root"属性

2.4 Isaac Sim仿真入门¶
经过上述内容的学习,相信大家已经熟悉Isaac Sim的图形化界面使用,但是如果了解这界面各个部分背后的属性,或者想要实现定制化的仿真物品、任务的想法,我们需要掌握Isaac Sim背后的仿真原理,这样我们就可以更好地利用这个工具,现在我们自己的需求。
Isaac Sim这类仿真器的目的是为了对现实场景进行物理仿真,按照仿真基础构建(物理场景、角色、环境)到仿真核心过程(运动、交互),再到仿真优化与数据处理(计算参数设置、数据记录处理),最后到仿真支撑与效率提升(物理引擎、初始边界条件、脚本自动化)的逻辑顺序,通常情况下,需要包括以下十个方面内容。
1. 物理空间:物理空间是仿真的基础,它定义了整个模拟环境的空间布局和基本物理特性。地面作为物理空间中的重要元素,为其他物体提供了支撑和参照。地面上的物体则构成了具体的模拟对象,它们的物理属性(如质量、材质等)和空间位置决定了仿真的初始状态和后续的相互作用。
2. 角色以及物体:人、机器人、小车等角色是仿真中的主要活动对象,它们具有各自独特的运动方式和行为模式。角色的物理模型和控制逻辑直接影响着仿真的真实性和实用性。例如,机器人的关节运动控制、小车的动力学模型等,都需要精确设置和调整,以实现符合实际情况的运动效果。
3. 环境:包括视觉环境和物理环境,如灯光以及天气状况等。灯光和天气状况等环境因素虽然不直接影响物理仿真的核心计算,但对仿真的可视化效果和真实感起着重要作用。合适的灯光设置可以突出物体的形状和材质,增强场景的层次感和立体感。而天气状况的模拟,如雨天、雪天等,不仅增加了视觉上的真实感,还可能对角色和物体的运动产生间接影响,例如在雨天地面摩擦力会减小。
4. 角色以及物体在物理空间的运动:角色的运动受到物理动力学的严格约束,这是物理仿真的核心内容之一。通过牛顿运动定律和其他物理原理,计算角色在各种力(如重力、摩擦力、驱动力等)作用下的加速度、速度和位移,从而实时更新角色的位置和姿态。准确的物理动力学模型是实现逼真运动效果的关键,任何微小的参数偏差都可能导致运动结果与实际情况不符。
场景中的物体不仅包括静态物体(如地面、墙壁、家具等),还可能包括动态物体(如可移动的箱子、球体等)。同时,考虑到运动相关的物理规律,物理场景的材质属性(如摩擦系数、弹性系数等)成为物理场景以及角色的重要属性。
同时,不同的角色类型(刚性、柔性、多体系统),其对应的物理特性也各不相同。
5. 角色或者物体相互间的交互:碰撞是角色或者物体相互间最常见的交互方式之一,同时还包括接触力:如摩擦力、支持力,传感器交互:如摄像头捕捉图像、激光雷达检测距离以及动态交互:如抓取、推动物体等。
准确的碰撞检测和合理的碰撞响应机制是保证仿真真实性的重要环节。当角色与其他物体发生碰撞时,需要根据物体的材质、碰撞速度等因素计算碰撞力和反弹效果,同时更新角色和物体的运动状态。此外,角色与环境的交互还包括其他方面,如与场景中的传感器交互、受到环境力的作用等。
6. 初始条件与边界条件: 场景以及角色等初始条件(如角色的初始位置、速度)和边界条件(如仿真空间的限制)是仿真设置的重要部分。
7. 仿真过程的数据记录与处理:在仿真过程中,记录各种数据(如角色的位置、速度、受力情况,环境参数等)是分析和评估仿真结果的基础。通过对这些数据的处理和分析,可以深入了解仿真过程中存在的问题,优化模型和参数,还可以为后续的研究和应用提供数据支持。例如,通过分析机器人在不同场景下的运动数据,改进其控制策略,提高其性能和适应性。
8. 物理引擎:所有仿真背后物理动力学的支撑就是物理引擎(NVIDIA PhysX),物理引擎主要会利用物理求解器对仿真过程的物理动力学进行计算模拟。
9. 仿真过程计算与性能相关的参数设置:这些参数对于优化仿真过程、提高计算效率和保证结果的准确性至关重要。例如,时间步长的设置决定了仿真的精度和计算速度,较小的时间步长可以提高精度,但会增加计算量;还有空间分辨率、迭代次数等参数,也都需要根据具体的仿真需求和硬件性能进行合理调整,以达到最佳的仿真效果。
10. 脚本与自动化:仿真的脚本化(如Python脚本)和自动化(如批量运行仿真)是提高效率的重要手段。
以下可以通过小车抵达某一目标位置的案例,感受一下以上十个方面
- 通过文件浏览器打开这一案例的USD文件,具体路径为"/isaac-sim/isaacsim_assets/Assets/Isaac/4.5/Isaac/Samples/OmniGraph/nova_carter_drive_to_goal.usd"

在打开USD资产文件过程中,如遇到如
2.3.3 文件浏览器章节的黑屏情况,可使用Reload进行重新加载渲染画面
- 通过USD场景查找这一案例的ActionGraph并打开,可以看到这一ActionGraph实现了这一案例的业务逻辑

- 点击"Play"播放按钮开始仿真,查看小车运动情况,可以按下图所示切换第三人称视图相机查看

在这个案例中,为了仿真小车在一个工厂厂房运动,我们实际上需要需要完成以下工作:
1、物理空间,我们需要首先创建工厂厂房、地面等这一个物理空间;
2、角色以及物体,我们需要在厂房这个物理空间中构建小车以及摄像机;
3、环境,在这个仿真场景中,我们设计的是白天、晴天的环境,所以对此也设置了对应的光线。
实际上,以上三个部分的内容往往会通过USD进行定义,这就是在本案例中通过打开USD文件,就可以看到车间、小车、摄像机以及灯光等的原因。
4. 角色以及物体在物理空间的运动,在这个场景中,小车的仿真行为就是在车间的运动;
5. 角色或者物体相互间的交互,下车在运动过程,有可能会和墙面等发生碰撞,如果要对这一行为进行仿真,就需要同时考虑到碰撞的问题;
6. 初始条件与边界条件,在仿真开始,我们需要设置小车的初始位置以及速度(处于静止状态);
实际上,以上几个部分的仿真行为就是需要在Isaac Sim中通过相应的设置或者编写相应的业务逻辑才能够完成,这是整个仿真工作的核心,上述案例中的ActionGraph就是完成这个业务逻辑设置的工具之一,小车运动时通过ActionGraph的逻辑驱动底盘的关节,并控制运动时不会因为摩擦力过小/过大导致运动状态异常。
7. 仿真过程的数据记录与处理,在小车的运动过程,在每一个时刻点,都会有相应的运动速度和角度,这些数据对于理解小车的运动过程以及后续对小车运动控制算法的改进都是非常关键的,Isaac Sim作为一个仿真平台,会在仿真过程,将这些数据进行记录,并在仿真结束后可以重新查看。
8. 物理引擎, 上述步骤的4和5,能够进行精确仿真的原因是,在Isaac Sim的背后有一个物理仿真引擎,它能够在小车的运动过程,对小车以及整个场景的物理动力学进行仿真计算,包括地球重力、小车与地面的摩擦力、小车自身的发动机动力等等。衡量一个仿真平台仿真过程是否逼真的核心部件就是物理引擎,所以这个仿真得以进行的非常核心的要素之一。
9. 仿真过程计算与性能相关的参数设置, 与物理引擎的计算相关的就是仿真过程的计算相关参数设置问题,很容易理解,如果计算越频繁,比如毫米级甚至微秒级计算一次小车的速度以及方向,那仿真画面就越细腻,仿真过程就越精确,但是随着而来的就是计算量的急剧上升,所以为了让物理引擎平衡好仿真精确性与计算量之间的问题,就需要根据我们实际仿真的需求,对仿真过程的计算与性能相关参数进行设置。
10. 脚本与自动化,Isaac Sim作为一个仿真平台,同时也需要能够通过脚本化或者部分自动化的方式来支持步骤1到6的操作,否则,如果所有的操作都依赖手工配置,那操作工作量就会非常大,而且也很难完成所有的仿真工作,所以如果通过脚本实现自动化仿真也是Isaac Sim平台所需要支持的。
以上从7到10,这4个部分的能力就是包括Isaac Sim在内的每一个仿真软件都需要支持的基本功能。
通过这个案例,我们知道它包含一个工厂厂房的物理场景,小车是仿真的主要活动对象,这个环境里包含灯光,小车运动时通过ActionGraph的逻辑驱动底盘的关节,运动时不会因为摩擦力过小/过大导致运动状态异常。
2.4.1 物理动力学相关工具¶
在刚刚的小车案例中,大家有没有发现小车并不会速度很快,到达目标位置的时候能缓慢停下。为什么它会产生这样的效果?上一节的介绍中,已经提到了实际上是通过物理引擎来完成这一个物理动力学的仿真,而物理引擎之所以能够遵循物理动力学相关规律,被背后的核心其实是物理求解器和约束求解器,这一节将简要介绍下物理求解器和约束求解器。
2.4.1.1 物理求解器¶
1、物理求解器概念及作用
在 Isaac Sim 中,物理求解器是基于 NVIDIA PhysX 技术的一个关键组件,用于执行物理模拟的计算,以确定场景中物体的运动、碰撞和相互作用等物理行为。
物理求解器具有以下作用:
计算物体运动:根据牛顿运动定律和其他物理原理,求解器计算每个刚体在力、扭矩作用下的加速度、速度和位置变化,让小车等物体能在模拟环境中按物理规律移动。比如在模拟小车行驶时,依据车轮所受扭矩、地面摩擦力及其他外力,求解器实时计算小车的加速度和速度,进而更新其位置,实现逼真的行驶效果。
处理碰撞检测与响应:物理求解器使用精确的碰撞检测算法,持续监测场景中物体间的碰撞情况。当检测到碰撞时,求解器依据物体的物理属性(如材质、质量、速度等)计算碰撞后的响应,如反弹、变形或停止。例如小车与其他物体碰撞后,求解器会计算小车和被撞物体的运动状态变化,模拟碰撞的物理效果。
模拟关节和约束:对于具有关节(如铰链关节、滑动关节等)连接的物体,如小车的车轮与车身通过旋转关节连接,物理求解器会根据关节的类型和参数来限制和计算连接物体间的相对运动,确保关节的运动符合物理规律,使小车车轮能绕轴正常转动,带动车身移动。
支持复杂物理模拟:除了刚体动力学,Isaac Sim 中的物理求解器还能模拟软体动力学、布料、粒子和流体等复杂物理现象。在模拟小车行驶在有流体(如雨水或泥泞)的环境中时,求解器可计算流体与小车的相互作用,影响小车的行驶。
保证模拟稳定性和准确性:物理求解器通过不断改进算法和优化计算,确保物理模拟的稳定性和准确性。在长时间模拟中,能保持物体运动和相互作用的物理真实性,减少误差和不稳定情况,如防止小车在无外力作用下突然加速或出现不自然的运动。
2、常见物理求解器
- 通用型物理求解器
NVIDIA PhysX:被广泛应用于游戏开发、机器人仿真等领域。它能够高效地模拟刚体动力学、软体动力学、碰撞检测与响应等多种物理现象,提供了丰富的 API,方便开发者集成到自己的项目中,可在 GPU 上运行以加速计算。
Bullet:是一款开源的物理引擎,在游戏开发、动画制作和机器人模拟等方面应用广泛。它支持刚体和软体模拟、碰撞检测、关节约束等功能,具有良好的跨平台性,可在多种操作系统上运行。
- 专用型物理求解器
OpenFOAM:主要用于计算流体动力学(CFD)领域。它提供了丰富的求解器和模型,能够模拟各种复杂的流体流动问题,如湍流、多相流、传热传质等,在航空航天、汽车工程、能源等领域有广泛应用。
ABAQUS/Explicit:是一款用于求解非线性动力学问题的有限元求解器,在汽车碰撞模拟、航空航天结构动力学分析等领域表现出色。它采用显式积分算法,能够高效地处理大变形、接触碰撞等复杂的非线性问题。
LIGGGHTS:专门用于离散元法(DEM)模拟的求解器,主要用于模拟颗粒系统的运动和相互作用,如粉体物料的输送、流化床反应器中的颗粒流动等,在化工、矿业、农业等领域有重要应用。
- 多物理场求解器
COMSOL Multiphysics:是一款功能强大的多物理场耦合分析软件,它可以将多种物理场(如电磁场、流体场、固体力学场等)进行耦合求解,能够模拟复杂的物理现象和相互作用,广泛应用于科学研究和工程设计的各个领域。
ANSYS Workbench:集成了多种物理求解器,能够进行结构力学、流体力学、热传导、电磁学等单物理场分析,以及多物理场的协同仿真,在机械工程、航空航天、电子设备等领域是常用的仿真平台。
2.4.1.2 约束求解器¶
约束求解器是一种用于处理和解决约束条件的软件组件或算法集合。在计算机模拟、机器人控制、图形学、优化问题以及许多其他领域中都有广泛的应用,其主要作用是在满足一系列约束条件的前提下,找到系统的可行解或最优解。
- 工作原理
约束求解器通常采用多种算法和技术来处理约束条件。常见的方法包括数值迭代法、基于搜索的方法、数学规划方法等。它会将问题中的约束条件转化为数学表达式或逻辑规则,然后通过不断地尝试和调整变量的值,使得这些约束条件得到满足。例如,在一个机器人运动规划问题中,约束求解器需要根据机器人的运动学限制、环境中的障碍物以及任务要求等约束条件,计算出机器人每个关节的运动角度和速度,以实现机器人从当前位置到目标位置的无碰撞运动。
- 应用场景
机器人学 在机器人的路径规划和运动控制中,约束求解器用于确保机器人的运动满足各种约束条件。如机器人的关节角度限制、速度限制、加速度限制,以及避免与周围环境中的障碍物发生碰撞等约束。通过求解这些约束条件,约束求解器可以生成机器人的可行运动轨迹,使机器人能够在复杂的环境中安全、高效地完成任务。
计算机图形学 在动画制作和虚拟场景模拟中,约束求解器用于实现物体之间的物理约束和交互效果。例如,模拟布料的飘动、刚体的碰撞和堆叠、角色的骨骼动画等。约束求解器可以根据物体的物理属性和约束条件,计算出每个时刻物体的位置、姿态和运动状态,从而生成逼真的动画效果。
工程设计与优化 在工程设计中,约束求解器常用于解决各种优化问题。例如,在机械设计中,需要在满足零件强度、刚度、尺寸限制等约束条件下,优化零件的形状和结构,以减轻重量或提高性能。在建筑设计中,约束求解器可以帮助设计师在满足建筑规范、空间要求和力学稳定性等约束条件下,优化建筑的布局和结构设计。
游戏开发 约束求解器在游戏开发中用于实现各种游戏元素的物理模拟和交互。如游戏角色的动作控制、物体的碰撞检测和响应、车辆的行驶模拟等。通过约束求解器,游戏开发者可以创建出更加真实和有趣的游戏场景,让玩家获得更好的游戏体验。
- Isaac Sim中常见的约束求解器
PhysX 约束求解器 Isaac Sim 基于 NVIDIA PhysX 进行物理模拟。PhysX 5 提供了不断改进的碰撞检测和求解器,可提升仿真的稳定性,使得栈和接口更加可靠,还改进了关节系统的动量守恒,并在刚体系统中引入陀螺力。虽然没有明确提及顺序脉冲求解器或基于位置的动力学求解器,但 PhysX 在处理约束求解时可能会采用类似的原理和算法来实现高效准确的物理模拟。
Lula 运动学求解器 Lula 运动学求解器是 Isaac Sim 中用于计算机器人运动学的求解器,它基于 NVIDIA 开发的 Lula 库。该求解器能够计算机器人的正向运动学和逆向运动学,可与关节运动学求解器配合使用,以一种能够直接应用于机器人关节的方式计算运动学。
2.4.1.3 约束求解器与物理求解器的相互关系¶
约束求解器与物理求解器不是同一回事,它们在功能、应用场景和计算方法等方面存在明显区别。
1、功能
约束求解器:主要功能是处理和满足各种约束条件,通过搜索、迭代等方法找到满足约束的解空间。例如,在机器人路径规划中,确保机器人运动符合关节角度、速度限制以及避开障碍物等约束,找到可行路径。
物理求解器:侧重于依据物理定律和原理,计算物体的物理行为,包括运动、受力、碰撞等。如在模拟小球掉落过程中,根据重力、空气阻力等计算小球的位置、速度变化。
2、应用场景
约束求解器:广泛应用于需要满足特定条件或规则的领域,如机器人学中运动规划、计算机图形学中动画制作的角色姿态控制、工程设计中满足设计规范和性能要求的优化,以及游戏开发中角色动作和场景交互的逻辑控制。
物理求解器:主要用于模拟物理现象和过程的场景,如在 Isaac Sim 等仿真软件中模拟刚体运动、软体变形、流体流动,以及在游戏开发中实现逼真的物理效果,如物体碰撞、破碎等。
3、计算方法
约束求解器:使用多种算法,如数值迭代法、基于搜索的方法(如深度优先搜索、广度优先搜索)、数学规划方法(如线性规划、非线性规划)等,通过不断调整变量值来满足约束条件。
物理求解器:基于牛顿运动定律、动量守恒定律、能量守恒定律等物理原理,采用数值积分方法(如欧拉法、龙格 - 库塔法)来求解运动方程,计算物体的运动状态和相互作用。
虽然在某些物理模拟场景中,约束求解器可能作为物理求解器的一部分或与物理求解器结合使用,例如在模拟刚体运动时,用约束求解器处理刚体间的连接约束,物理求解器计算刚体的整体运动,但它们的功能和应用重点不同,不是同一回事。
2.4.2 仿真相关概念¶
不知道大家在了解、操作USD场景树时(即构建物理空间、创建角色物体、创建环境),会不会对场景树里面的内容产生迷惑?例如在上述USD场景树的案例里,机械臂很多个链状物(link)组成,链状物由许多几何材料组成,他们之间为什么可以组合在一起?似乎没有看到与现实中螺丝一样作用的部件,其实,这涉及了USD以及Isaac Sim仿真建模背后的核心原理。因此,我们需要掌握Isaac Sim仿真背后的相关概念,才能很好地理解仿真的内容。
2.4.2.1 USD通用概念¶
1、Prim
USD 中的基本容器对象,可包含其他 prims 和属性,用于创建场景图中的层次结构。例如,一个机器人模型中的各个部件可能是不同的 prim,通过它们的组合来构建完整的机器人场景。
2、Xform
一种特殊的 prim,用于表示物体的变换信息,包括位置、旋转和缩放。在 Isaac Sim 中,可通过修改 Xform 的属性来控制场景中物体的空间姿态。
大家可以重新打开"Simple Rooms"及添加"Franka Emika Panda Arm"机械臂,查看右侧"Franka Emika Panda Arm"机械臂的USD场景树,可以看到机械臂的顶层是一个Xform,其内部也是通过一个个Xform组织机械臂各个部件(link),各个部件(link)的关节

2.4.2.2 物理场景(Physics Scene)¶
物理场景是比物理空间更大的一个概念,其包含了所有物理空间以及所有参与物理模拟的角色、物体、环境等元素的一个集合。它定义了整个仿真的物理环境,如重力、物理求解器参数等。一个场景中可以有多个刚体和关节物体相互作用。以下通过创建一个物理场景对其进行属性说明,以下是创建物理场景的步骤:
- 点击"Create"->"Physics"->"Physics Scene"

在物理场景中,为了使得其中的角色、物体、以及环境等能够符合物理动力学的规律,就需要进行相应的参数设置,这其中的部分参数,在具体的角色和物体、环境中也会涉及到。场景设置的是对整个场景里的所有角色、物体以及环境都适用的参数,在具体的角色、物体以及环境中进行的设置,则只是对具体一个角色、物体或者环境发生作用的参数。
- 重力(Gravity):定义了场景中物体所受重力的大小和方向。通常以向量形式表示,例如在地球上,重力加速度约为9.8m/s,方向垂直向下。在 Isaac Sim 中可根据实际需求调整重力参数,以模拟不同星球或特殊环境下的物理现象。可通过Physics Scene属性面板查看重力属性值,如下所示,创建的Physics Scene重力属性默认为Earth Gravity。

- 物理求解器参数(Physics Solver Parameters)
物理求解器参数其实就是上一节所讲的仿真过程计算与性能相关的参数设置,它会影响仿真的精度和速度。
- 时间步长(Time Steps Per Second):决定了物理模拟中每一秒的更新多少步。较小的时间步长可以提高模拟的精度,但会增加计算量和模拟时间(即物理引擎计算频率高);较大的时间步长则可能导致模拟结果不准确,但能加快模拟速度(即物理引擎计算频率低)。一般需要根据场景的复杂程度和对精度的要求来选择合适的时间步长。可以通过Physics Scene属性面板设置"Time Steps Per Second",如下所示,默认 1 秒更新 60 次。

- 物理求解器求解策略(solver Type):Isaac Sim默认使用PhysX的物理求解器,其提供两种求解策略,分别为PGS(速度慢但精细)、TGS(速度快但精度较低),可根据实际情况进行调整,可以通过Physics Scene属性面板设置"Solver Type",如下所示,默认使用TGS。

注意:如果 TGS求解策略精度太低时,可调整Physics Scene的"Raw USD Properties"->"Enable External Forces Every Iteration"属性,增加求解精度,如下图所示

- 迭代次数(Iterations):物理求解器在每个时间步内进行迭代计算的次数。增加迭代次数可以提高模拟的稳定性和准确性,但同样会增加计算成本。对于复杂的物理场景,可能需要较多的迭代次数来确保模拟结果的可靠性。在Isaac Sim中会有速度迭代和位置迭代两种方式,速度迭代一般用于计算碰撞响应(如摩擦力的动态影响)、关节动力学(如机械臂关节的旋转速度控制)等,位置迭代一般用于计算静态平衡(如保持物体静止时的稳定姿态)、穿透修正(如防止物体重叠)等。迭代次数推荐使用默认值即可。如下图所示Physics Scene的迭代次数属性。

2.4.2.3 角色以及物体¶
1. 刚体(Rigid Body)¶
刚体(Rigid Body)是物理模拟中保持形状不变的可运动物体,支持平移和旋转运动。它具有质量、惯性、速度、角速度、碰撞网络等属性,这些属性决定了物体如何响应外力和碰撞。刚体可以是动态的(可以受到外力和碰撞的影响)或静态的(不会移动)。在Isaac Sim中可以通过属性面板"Add"->"Physics"->"RigidBody"对一个物体增加刚体属性。以下在物理场景中创建一个立方体且赋予它刚体属性。
- 新建一个物理场景和地面

- 新建一个立方体且通过属性面板添加刚体属性("Add"->"Physics"->"RigidBody")

- 大家可以看到,现在立方体的属性面板包含刚体属性。

大家可以上述立方体的Rigid Body包含许多属性,以下将对这些属性进行分类及说明。
1.1 运动控制属性
初始线速度(Linear Velocity):这个属性包含x、y、z三个方向,可根据实际情况设置刚体具体方向的初始线速度(默认单位为m/s)。如下所示,设置立方体初始线速度为x轴方向为1m/s,且把立方体设置为一定高度,观察立方体运动情况。

最大线速度(Max Linear Velocity):这个属性包含x、y、z三个方向,可根据实际情况设置刚体具体方向的最大线速度(默认最大线速度为正无穷,单位为m/s)。如下所示,设置立方体初始线速度为x轴方向为10m/s、x轴方向最大线速度为1m/s,且把立方体设置为一定高度,立方体的x轴方向线速度不会大于1m/s。

初始角速度(Angular Velocity):这个属性包含x、y、z三个方向,可根据实际情况设置刚体具体方向的初始角速度(默认单位为°/s)。如下所示,设置立方体初始角速度为y轴方向为10°/s,且把立方体设置为一定高度,观察立方体运动情况。

最大角速度(Max Angular Velocity):这个属性包含x、y、z三个方向,可根据实际情况设置刚体具体方向的最大角速度(默认单位为 °/s)。如下所示,设置立方体初始角速度为y轴方向为100°/s、y轴方向最大角速度为10°/s,且把立方体设置为一定高度,观察立方体运动情况。

开启运动学模式(Kinematic Enabled):这个属性为True时,刚体将无视物理规律,只会根据外部设置(Python API等)的值进行运动。如下所示,开启立方体运动学模式,不论初始线速度设置有多大,立方体不会掉落也不会往线速度方向运动。

线速度衰减系数(Linear Damping):这个属性设置刚体线速度衰减速度,值越大时线速度衰减越快,值越小时线速度衰减越慢。如下所示,设置立方体x轴方向初始线速度为10m/s,线速度衰减系数为 10 时,立方体很快停下来。

角速度衰减系数(Angular Damping):这个属性设置刚体线速度衰减速度,值越大时线速度衰减越快,值越小时线速度衰减越慢。如下所示,设置立方体初始y轴方向角速度为100°/s,角速度衰减系数为 10 时,立方体很快停下来。

开启初始休眠(Starts as Asleep):这一属性设置刚体在初始时是否休眠,如果开启,尽管初始线速度/角速度设置多大,刚体均不运动。如下所示,设置立方体在一定高度,勾选开启初始休眠,立方体初始时并不会掉落。

静止阈值(Sleep Threshold):用于设置刚体动能低于这一属性值时停止运动。默认值为0.005。
位置轴锁定(Locked Pos Axis):用于禁止刚体在某一个轴方向的平移运动。
旋转轴锁定(Locked Rot Axis):用于禁止刚体在某一个轴方向的旋转运动。
1.2 物理属性
归属物理场景(Simulation Owner):用于设置刚体在哪一物理场景(Physics Scene)进行计算(渲染)。
取消重力计算(Disable Gravity):用于设置刚体是否进行重力计算。如下所示,勾选这一属性,立方体在一定高度不会掉落。
1.3 碰撞相关属性
碰撞相关参数在刚体(Prim)上可以设置,本部分可结合"Franka Emika Panda Arm"机械臂进行理解,可先在仿真器打开"Franka Emika Panda Arm",如下所示
注:机械臂各个部件为刚体,本例以"panda_link0"这一刚体为例说明碰撞相关属性

可选择"Franka Emika Panda Arm"场景树->"panda_link0"->"geometry"->"panda_link0"

打开碰撞网络查看,点击视图按钮->"Show By Type"->"Physic"->"Colliders"->"Selected",可以可视化"panda_link0"的碰撞网络,如图绿色部分

以下是碰撞参数详细介绍。
开启碰撞(Enable Collision):用于开启/关闭物品的碰撞属性
可以通过属性面板查看"panda_link0"的碰撞属性("Physics"->"Collider"),尝试取消勾选"Enable Collision",观察panda_link0"碰撞网络变化,看看碰撞网络是不是已去除

碰撞近似方法(Approximation):用于控制复杂网格如何简化为碰撞体,平衡精度与性能。包含None(直接使用物品原始碰撞网格,适用于高精度静态物体,精度最高)、ConvexDecomposition(把物品碰撞网络的将凹网格分解为多个凸包,适用于复杂物体,精度适中)、ConvexHull(生成包裹整个碰撞网格的单一凸包近似,适用于简单动态物体,精度低)、BoundingSphere(使用球状包围物品的碰撞网络,适用于快速碰撞检测场景,精度低)、BoundingCube(使用立方体状包围物品的碰撞网络,适用于大批量物体粗略检测的场景,精度较低)、MeshSimplification(简化原始碰撞网格,会保留原始碰撞细节,精度中等偏上)、SDF Mesh(有向距离场网格,会大部分保留原始碰撞细节,精度较高)、Sphere Approximation(通过球体填充原始碰撞网络,精度适中)八种碰撞近似方法。以下通过机械臂某个部件的碰撞网络加深理解
重新勾选"panda_link0"的"Enable Collision"属性,尝试调整"Approximation"属性值为"BoundingSphere"、"MeshSimplification",观察panda_link0"碰撞网络变化

2. 关节¶
关节用于连接物理物体,像机械臂的轴承,控制两个物体间的相对运动(如旋转/滑动)。Isaac Sim支持的关节类型如下:
| 类型 | 核心功能描述 |
|---|---|
| 旋转关节 (Revolute Joint) | 实现单轴旋转运动(如机械臂关节) |
| 平移关节 (Prismatic Joint) | 控制单轴直线运动(如抽屉滑轨) |
| 球形关节 (Spherical Joint) | 支持三轴自由旋转(如人体肩关节) |
| D6关节 (D6 Joint) | 可配置0-6自由度混合运动(需锁定线性轴时支持1-3旋转自由度) |
| 固定关节 (Fixed Joint) | 完全固定两个物体的相对位置和姿态(如机械臂固定至小车) |
| 距离关节 (Distance Joint) | 保持连接体间最大间距(如悬挂物体的安全索) |
| 齿轮关节 (Gear Joint) | 通过传动比同步两个旋转关节(如机械钟表齿轮组) |
| 齿条关节 (RackAndPinion Joint) | 将旋转运动转换为直线运动(如汽车转向机构) |
在机器人仿真场景中,常用的关节类型为旋转关节 (Revolute Joint)、固定关节 (Fixed Joint)。如下所示,查看"Franka Emika Panda Arm"机械臂的"panda_joint1"的关节类型为旋转关节(Revolute Joint)。

3. 关节体(Articulated Object)¶
指由多个互相连接的部分(如关节或链节)组成的物体,例如机器人,其运动由多个关节的协同运动来实现。如Franka Emika Panda Arm"机械臂,它包含七个旋转关节、两个固定关节、两个平移关节,如下图所示。

2.4.2.4 环境¶
在 Isaac Sim 中,环境的概念包含多个方面,主要有以下内容:
视觉环境
灯光:灯光设置对场景的可视化效果至关重要。不同类型的灯光,如点光源、聚光灯、平行光等,可以模拟出不同的光照效果,突出物体的形状、材质和轮廓,增强场景的层次感和立体感,营造出真实或特定氛围的光照环境。
材质与纹理:场景中物体的材质和纹理也是视觉环境的一部分。通过设置不同的材质属性,如金属、塑料、木材等材质的外观特性,以及应用各种纹理贴图,可以使物体看起来更加逼真,增加视觉细节。
传感器环境
- 摄像头:用于捕捉场景的视觉信息,模拟真实世界中的摄像机效果。可以设置摄像头的位置、朝向、焦距、视场角等参数,以获取不同视角和分辨率的图像数据,为计算机视觉算法提供输入。
2.4.2.5 角色以及物体在物理空间的运动¶
角色以及物体在物理空间运动会受到基本力学参数、材料特性参数的影响,以下是相关介绍。
注:这些参数会设置至角色内。
- 基本力学参数
摩擦系数(Friction Coefficient)
- 静摩擦系数(Static Friction Coefficient):表示物体在静止状态下,开始相对滑动时所需要克服的摩擦力与正压力的比值。例如,在模拟机器人在地面上行走时,较高的静摩擦系数可以防止机器人在起步时打滑。
- 动摩擦系数(Dynamic Friction Coefficient):指物体在相对滑动过程中,摩擦力与正压力的比值。动摩擦系数通常小于静摩擦系数,它影响物体滑动时的阻力大小。在模拟物体在平面上滑动的场景中,动摩擦系数决定了物体滑行的距离和速度衰减的快慢。
弹性系数(Restitution Coefficient):也称为恢复系数,用于衡量物体在碰撞后恢复原状的能力和反弹程度。取值范围在 0 到 1 之间,值为 0 表示完全非弹性碰撞,物体碰撞后不会反弹,而是粘在一起;值为 1 表示完全弹性碰撞,物体碰撞后能完全恢复原状并以相同的速度反弹。例如,模拟篮球与地面的碰撞时,合适的弹性系数可以使篮球的反弹效果更接近真实情况。
- 材料特性参数
密度(Density):表示物质单位体积的质量,它影响物体的质量和惯性。不同的物理材质具有不同的密度,例如金属的密度通常比塑料大。在物理模拟中,密度会影响物体的重力、运动状态以及与其他物体的相互作用。例如,在模拟物体的自由落体运动时,密度较大的物体在相同体积下质量更大,受到的重力也更大。
刚度(Stiffness):描述材料抵抗弹性变形的能力。对于可变形的物理材质,刚度决定了物体在受力时的变形程度。较高的刚度意味着物体在受力时变形较小,例如钢铁的刚度较大,在受到较小的力时几乎不会发生明显的变形;而橡胶的刚度较小,容易发生较大的弹性变形。
阻尼(Damping):用于耗散物体振动或变形过程中的能量,使物体的运动逐渐趋于稳定。阻尼可以减少物体的振荡和反弹,使物体的运动更加平滑。在模拟具有弹性的物体时,适当的阻尼可以防止物体产生过度的振动,例如在模拟弹簧的伸缩过程中,阻尼可以使弹簧的振动逐渐停止。
2.4.2.6 角色或者物体相互间的交互¶
为了模拟角色与环境之间碰撞的交互,Isaac Sim使用了碰撞器(Collider)的概念,碰撞器用于定义物体的碰撞形状和边界的组件,通常与刚体一起使用。碰撞器没有质量、速度等物理属性,仅用于检测物体之间的碰撞。碰撞器可以是各种形状,如盒状碰撞器、球形碰撞器、网格碰撞器等,以适应不同形状的物体。
1. 基本形状类型¶
ConvexDecomposition(把物品碰撞网络的将凹网格分解为多个凸包,适用于复杂物体,精度适中)
ConvexHull(生成包裹整个碰撞网格的单一凸包近似,适用于简单动态物体,精度低)
BoundingSphere(使用球状包围物品的碰撞网络,适用于快速碰撞检测场景,精度低)
BoundingCube(使用立方体状包围物品的碰撞网络,适用于大批量物体粗略检测的场景,精度较低)
MeshSimplification(简化原始碰撞网格,会保留原始碰撞细节,精度中等偏上)
SDF Mesh(有向距离场网格,会大部分保留原始碰撞细节,精度较高)
Sphere Approximation(通过球体填充原始碰撞网络,精度适中)
2. 碰撞偏移参数¶
碰撞偏移 (Collision Offset):从碰撞几何体表面起开始生成接触的距离。
静止偏移 (Rest Offset):与表面有效接触的位置。
以下为这两个参数的图片描述。

2.4.2.7 各个概念相互间的关系¶
刚体和碰撞器:Isaac Sim 中,刚体是在仿真过程中形状不会变化的物理对象,具有质量、惯性等属性,而碰撞器用于定义物体的碰撞形状和边界,通常与刚体一起使用。在 USD 中,刚体和碰撞器相关信息可能通过特定的 prim 属性或扩展来描述。例如,一个机器人的各个肢体可能被定义为刚体,通过 USD 中的相关属性来设置其物理参数,而肢体的碰撞形状则通过碰撞器来定义,这些信息会在 USD 文件中有所体现。
刚体与物理材质:物理材质决定了刚体的物理行为特性。例如,刚体材质赋予刚体特定的摩擦系数、弹性等属性,影响刚体在碰撞、运动时的表现。不同的刚体材质会使刚体在受到外力作用或与其他物体碰撞时,产生不同的运动状态变化和碰撞效果。可变形材质则用于模拟具有弹性或可变形特性的刚体,如橡胶球、海绵等,这类刚体在受力时会发生形状改变,并遵循相应的弹性或塑性规律。
在 Isaac Sim 中,物理材质和碰撞器通常是需要添加在刚体上。
刚体与关节:刚体通常是机器人的各个组成部分,如肢体、躯干等,而关节用于连接不同的刚体,控制它们之间的相对运动。关节定义了刚体之间的连接方式和运动约束,例如旋转关节允许两个刚体绕特定轴进行相对旋转,棱柱关节则允许相对直线运动。关节的参数,如刚度、阻尼等,会影响刚体之间的运动平滑度和稳定性。通过关节的协同运动,多个刚体可以组合成具有复杂运动能力的机器人或其他关节体。
关节与物理材质:关节的物理材质属性会影响其运动的灵活性和稳定性。例如,关节的刚度和阻尼参数与物理材质相关,刚度决定了关节抵抗变形的能力,阻尼则用于耗散关节运动中的能量,防止过度振动或不稳定运动。合适的物理材质设置对于关节实现准确、流畅的运动至关重要,特别是在模拟具有真实物理特性的机器人运动时。
物理场景与其他概念:物理场景是包含所有参与物理模拟的物体、刚体、关节、碰撞器等元素的集合。它定义了整个仿真的物理环境,如重力、物理求解器参数等。物理场景为刚体、关节等提供了运动和相互作用的空间,刚体和关节的运动以及它们之间的碰撞等物理行为都在物理场景中进行模拟和计算。同时,物理场景的设置也会影响物理材质的表现,例如不同的重力环境会影响刚体的运动速度和碰撞效果。
Xform 与其他概念:Xform 用于表示物体(包括刚体、关节连接的各个部件等)的变换信息,包括位置、旋转和缩放。通过修改 Xform 的属性,可以控制场景中物体的空间姿态,从而影响刚体之间的相对位置和关节的初始状态。在构建机器人模型时,合理设置各个部件的 Xform,可以准确地定义机器人的结构和初始姿态,进而影响整个机器人在物理场景中的运动和行为。
碰撞器与刚体、物理场景:碰撞器定义了刚体的碰撞形状和边界,用于检测刚体之间以及刚体与场景中其他物体之间的碰撞。当两个刚体的碰撞器发生重叠时,物理场景中的物理求解器会根据刚体的物理材质和碰撞器的属性来计算碰撞响应,如反弹、摩擦等。碰撞器的设置直接影响到刚体在模拟中的碰撞检测准确性和物理行为的真实性。


